//
//  LineTool.m
//  iPadDev01
//
//  Created by smu on 11-7-29.
//  Copyright 2011年 duk. All rights reserved.
//

#import "LineTool.h"
#import "PathDrawingInfo.h"
#import "SynthesizeSingleton.h"

@implementation LineTool
@synthesize delegate;
SYNTHESIZE_SINGLETON_FOR_CLASS(LineTool);
- init 
{
    if ((self = [super init])) {
        trackingTouches = [[NSMutableArray array] retain];
        startPoints = [[NSMutableArray array] retain];
    }
    return self;
}
- (void)activate
{
    
}

- (void)deactivate
{
    [trackingTouches removeAllObjects];
    [startPoints removeAllObjects];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIView *touchedView = [delegate viewForUseWithTool:self];
    for (UITouch *touch in [event allTouches]) {
        // remember the touch, and its original start point, for future
        [trackingTouches addObject:touch];
        CGPoint location = [touch locationInView:touchedView];
        [startPoints addObject:[NSValue valueWithCGPoint:location]];
    }
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIView *touchedView = [delegate viewForUseWithTool:self];
    for (UITouch *touch in [event allTouches]) {
        //make a line from the start point to the current point
        NSUInteger touchIndex = [trackingTouches indexOfObject:touch];
        // only if we actually remember the start of this touch ...
        if (touchIndex != NSNotFound) {
            CGPoint startPoint = [[startPoints objectAtIndex:touchIndex] CGPointValue];
            CGPoint endPoint = [touch locationInView:touchedView];
            UIBezierPath *path = [UIBezierPath bezierPath];
            [path moveToPoint:startPoint];
            [path addLineToPoint:endPoint];
            PathDrawingInfo *info = [PathDrawingInfo pathDrawingInfoWithPath:path
                                                                   fillColor:delegate.fillColor
                                                                 strokeColor:delegate.strokeColor];
            [delegate addDrawable:info];
            [trackingTouches removeObjectAtIndex:touchIndex];
            [startPoints removeObjectAtIndex:touchIndex];
            
        }
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    
}

- (void)drawTemporary
{
    UIView *touchedView = [delegate viewForUseWithTool:self];
    for (int i = 0; i<[trackingTouches count]; i++) {
        UITouch *touch = [trackingTouches objectAtIndex:i];
        CGPoint startPoint = [[startPoints objectAtIndex:i] CGPointValue];
        CGPoint endPoint = [touch locationInView:touchedView];
        UIBezierPath *path = [UIBezierPath bezierPath];
        [path moveToPoint:startPoint];
        [path addLineToPoint:endPoint];
        [delegate.strokeColor setStroke];
        [path stroke];
    }
}

- (void)dealloc
{
    [trackingTouches release];
    [startPoints release];
    self.delegate = nil;
    [super dealloc];
}

@end
